package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 验证错误级别枚举
 *
 * 管理成绩验证规则的错误级别，包括错误、警告、信息等级别
 *
 * @author System
 * @version 1.0.0
 */
public enum ValidationErrorLevel implements BaseEnum {

    /**
     * 错误
     */
    ERROR("ERROR", "错误"),

    /**
     * 警告
     */
    WARNING("WARNING", "警告"),

    /**
     * 信息
     */
    INFO("INFO", "信息");

    private final String code;
    private final String description;

    ValidationErrorLevel(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 获取枚举的JSON值（使用code）
     *
     * @return 枚举代码
     */
    public String getJsonValue() {
        return code;
    }

    /**
     * 从代码创建枚举实例
     *
     * @param code 枚举代码
     * @return 对应的枚举实例，如果代码无效则返回WARNING
     */
    public static ValidationErrorLevel fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return WARNING;
        }

        for (ValidationErrorLevel level : values()) {
            if (level.getCode().equals(code)) {
                return level;
            }
        }
        return WARNING;
    }

    /**
     * 检查是否为错误级别
     *
     * @return true如果是错误级别
     */
    public boolean isError() {
        return this == ERROR;
    }

    /**
     * 检查是否为警告级别或更高
     *
     * @return true如果是警告级别或更高
     */
    public boolean isWarningOrHigher() {
        return this == WARNING || this == ERROR;
    }

    /**
     * 获取级别数值
     *
     * @return 级别数值
     */
    public int getValue() {
        switch (this) {
            case INFO:
                return 1;
            case WARNING:
                return 2;
            case ERROR:
                return 3;
            default:
                return 0;
        }
    }
}